$(function(){
	//拦截form,在form提交前进行验证
    $('form').bind('submit',beforeSubmit);
	
	//为带有valType属性的元素初始化提示信息并注册onblur事件
	$.each($("[valType]"),function(i, n) {
		$(n).poshytip({
				className: 'tip-yellowsimple',
				content: $(n).attr('msg'),
				showOn: 'none',
				alignTo: 'target',
				alignX: 'right',
				alignY: 'center',
				offsetX: 5,
				offsetY: 10
			});
		$(n).bind('blur',validateBefore);
	});
	
	//定义一个验证器
	$.Validator=function(para) {
		
	
	}

	$.Validator.ajaxValidate=function() {
		beforeSubmit();
	}
	
	//验证的方法
	$.Validator.match=function(para) {
		//定义默认的验证规则
		var defaultVal = {
			NUMBER : "^[0-9]*$",
			TEL : "^0(10|2[0-5789]|\\d{3})-\\d{7,8}$",
			IP : "^((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]|[*])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]|[*])$",
			MOBILE : "^1(3[0-9]|5[0-35-9]|8[0235-9])\\d{8}$",
			MAIL : "^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$",
			IDENTITY : "((11|12|13|14|15|21|22|23|31|32|33|34|35|36|37|41|42|43|44|45|46|50|51|52|53|54|61|62|63|64|65|71|81|82|91)\\d{4})((((19|20)(([02468][048])|([13579][26]))0229))|((20[0-9][0-9])|(19[0-9][0-9]))((((0[1-9])|(1[0-2]))((0[1-9])|(1\\d)|(2[0-8])))|((((0[1,3-9])|(1[0-2]))(29|30))|(((0[13578])|(1[02]))31))))((\\d{3}(x|X))|(\\d{4}))",
			CHINESE : "^([\u4E00-\uFA29]|[\uE7C7-\uE7F3])*$",
			URL : "^http[s]?://[\\w\\.\\-]+$"
		};
		var flag=false;
		if(para.rule=='OTHER') {//自定义的验证规则匹配
			flag=new RegExp(para.regString).test(para.data);
		}
		else {
			if(para.rule in defaultVal) {//默认的验证规则匹配
			flag=new RegExp(defaultVal[para.rule]).test(para.data);
			}
		}
		
		return flag;
	}

	
	
	//为jquery扩展一个doValidate方法，对所有带有valType的元素进行表单验证，可用于ajax提交前自动对表单进行验证
	$.extend({
		doValidate: function() {
			return $.Validator.ajaxValidate();
		}
	});

   });

//输入框焦点离开后对文本框的内容进行格式验证
function validateBefore() {
	//验证通过标识
	var flag=true;
	//获取验证类型
	var valType=$(this).attr('valType');
	//获取验证不通过时的提示信息
	var msg=$(this).attr('msg');
	//自定义的验证字符串
	var regString;
	
	if(valType=='OTHER') {//如果类型是自定义，则获取自定义的验证字符串
		regString=$(this).attr('regString');
		flag=$(this).val()!=''&&$.Validator.match({data:$(this).val(), rule:$(this).attr('valType'), regString:$(this).attr('regString')});
	}
	else {//如果类型不是自定义，则匹配默认的验证规则进行验证
		
			if($(this).attr('valType')=='passwd') 
			{
				if($(this).val()!=$("#Text1").val())
				{
					flag=false;
				}
			}
			else if($(this).attr('valType')=='required') {//不能为空的判断
				if($(this).val()=='') {
					flag=false;
				}
			}
			else {//已定义规则的判断
				flag=$(this).val()!=''&&$.Validator.match({data:$(this).val(), rule:$(this).attr('valType')});
			}
	}
	//先清除原来的tips
	$(this).poshytip('hide');
	//如果验证没有通过，显示tips
	if(!flag) {
			$(this).poshytip('show');
	}
	
}

//submit之前对所有表单进行验证
function beforeSubmit() {
	var flag=true;
	//alert($("[valType]").length);
	 $.each($("[valType]"),function(i, n) {
		 //清除可能已有的提示信息
		 $(n).poshytip('hide');
				 
		if($(n).attr('valType')=='passwd') 
			{
				if($(n).val()!=$("#Text1").val())
				{
					flag=false;
				}
			}
			else if($(n).attr("valType")=='required') {//对不能为空的文本框进行验证
			if($(n).val()=='') {
			//显示tips			
			$(n).poshytip('show');
			flag=false;
			}
		}
		else if($(n).attr("valType")=='OTHER') {//对自定义的文本框进行验证
			if(!($(this).val()!=''&&$.Validator.match({data:$(this).val(), rule:$(this).attr('valType'), regString:$(this).attr('regString')}))) {
				$(n).poshytip('show');
				flag=false;
			}
		}
		else {//对使用已定义规则的文本框进行验证			
			if(!($(this).val()!=''&&$.Validator.match({data:$(this).val(), rule:$(this).attr('valType')}))) {
				$(n).poshytip('show');
				flag=false;
			}
		}
	 });
     return flag;
}


//下面是测试代码，不属于验证器的功能代码之内
//用原型的方式来模拟js的类
function Validators() {

}

Validators.prototype.subByJs=function(e) {
	if($.doValidate()) {
		alert('验证通过');
		//todo
	}
}
/*www.jq22.com*/